package cn.zust.itcost.config;

import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

@Configuration
public class TextAnalysisConfig {
    
    // 停用词集合
    public static final Set<String> STOP_WORDS = new HashSet<>(Arrays.asList(
        // 标点符号
        " ", "，", "。", "、", "；", "：", "？", "！", "（", "）", "【", "】", "《", "》", "「", "」",
        "『", "』", "〔", "〕", "〖", "〗", "〘", "〙", "〚", "〛", "〝", "〞", "〟", "〠", "〡", "〢",
        "〣", "〤", "〥", "〦", "〧", "〨", "〩", "〪", "〫", "〬", "〭", "〮", "〯", "〰", "〱", "〲",
        "〳", "〴", "〵", "〶", "〷", "〸", "〹", "〺", "〻", "〼", "〽", "〾", "〿",
        
        // 常用虚词
        "的", "了", "是", "在", "和", "有", "我", "你", "他", "她", "它", "这", "那", "就", "也",
        "都", "还", "又", "不", "很", "到", "去", "来", "上", "下", "中", "里", "年", "月", "日",
        "时", "分", "秒", "个", "只", "次", "些", "个", "位", "名", "项", "种", "类",
        
        // 重复词
        "等", "等等", "等等等", "等等等等", "等等等等等", "等等等等等等", "等等等等等等等", "等等等等等等等等",
        "等等等等等等等等等", "等等等等等等等等等等", "等等等等等等等等等等等", "等等等等等等等等等等等等",
        "等等等等等等等等等等等等等", "等等等等等等等等等等等等等等", "等等等等等等等等等等等等等等等",
        "等等等等等等等等等等等等等等等等", "等等等等等等等等等等等等等等等等等", "等等等等等等等等等等等等等等等等等等"
    ));
    
    // 技能词词典
    public static final Set<String> SKILL_KEYWORDS = new HashSet<>(Arrays.asList(
        // 编程语言
        "Java", "Python", "C++", "C#", "JavaScript", "TypeScript", "Go", "Rust", "PHP", "Ruby",
        "Swift", "Kotlin", "Scala", "R", "MATLAB", "Shell", "Perl", "Lua", "Groovy", "Dart",
        
        // 前端技术
        "HTML", "CSS", "Vue", "React", "Angular", "jQuery", "Bootstrap", "Node.js", "Webpack",
        "Vite", "TypeScript", "ES6", "Sass", "Less", "Stylus", "WebGL", "Three.js", "D3.js",
        
        // 后端技术
        "Spring", "SpringBoot", "SpringCloud", "MyBatis", "Hibernate", "JPA", "Dubbo", "Netty",
        "Nginx", "Apache", "Tomcat", "Jetty", "Undertow", "WebLogic", "WebSphere", "JBoss",
        
        // 数据库
        "MySQL", "Oracle", "PostgreSQL", "SQL Server", "MongoDB", "Redis", "Elasticsearch",
        "HBase", "Cassandra", "Neo4j", "ClickHouse", "TiDB", "OceanBase", "Greenplum",
        
        // 中间件
        "Kafka", "RabbitMQ", "RocketMQ", "ActiveMQ", "ZooKeeper", "Etcd", "Consul",
        "Nacos", "Apollo", "Sentinel", "Seata", "ShardingSphere", "MyCat",
        
        // 容器与云原生
        "Docker", "Kubernetes", "Istio", "Envoy", "Prometheus", "Grafana", "ELK",
        "Jenkins", "GitLab", "Harbor", "Helm", "Kustomize", "Argo", "Tekton",
        
        // 大数据与AI
        "Hadoop", "Spark", "Flink", "Hive", "HBase", "Kylin", "Druid", "Presto",
        "TensorFlow", "PyTorch", "Keras", "Scikit-learn", "Pandas", "NumPy", "SciPy",
        
        // 开发工具
        "Git", "SVN", "Maven", "Gradle", "Ant", "Jenkins", "SonarQube", "Jira",
        "Confluence", "Postman", "Swagger", "JMeter", "Selenium", "Appium",
        
        // 系统与网络
        "Linux", "Windows", "macOS", "Android", "iOS", "TCP/IP", "HTTP", "HTTPS",
        "DNS", "CDN", "VPN", "防火墙", "负载均衡", "高可用", "容灾", "备份",
        
        // 架构与设计
        "微服务", "分布式", "高并发", "高可用", "高性能", "可扩展", "可维护", "可测试",
        "DDD", "TDD", "BDD", "敏捷开发", "DevOps", "CI/CD", "容器化", "云原生",
        
        // 安全
        "网络安全", "信息安全", "数据安全", "应用安全", "渗透测试", "漏洞扫描", "加密",
        "认证", "授权", "审计", "合规", "GDPR", "等保", "ISO27001",
        
        // 项目管理
        "项目管理", "产品管理", "需求分析", "系统设计", "架构设计", "代码审查", "测试",
        "部署", "运维", "监控", "告警", "故障处理", "性能优化", "容量规划"
    ));
    
    // 教育相关关键词
    public static final Set<String> SCHOOL_KEYWORDS = new HashSet<>(Arrays.asList(
        "大学", "学院", "学校", "研究所", "研究院", "中心", "实验室", "基地", "校区", "分校"
    ));
    
    public static final Set<String> DEGREE_KEYWORDS = new HashSet<>(Arrays.asList(
        "本科", "硕士", "博士", "学士", "研究生", "博士后", "专科", "高职", "中专", "中职"
    ));
    
    public static final Set<String> MAJOR_KEYWORDS = new HashSet<>(Arrays.asList(
        "专业", "系", "方向", "学科", "领域", "研究方向", "主修", "辅修", "双学位", "跨专业"
    ));
    
    // 工作相关关键词
    public static final Set<String> COMPANY_KEYWORDS = new HashSet<>(Arrays.asList(
        "公司", "集团", "企业", "科技", "网络", "信息", "数据", "软件", "系统", "服务",
        "咨询", "管理", "投资", "金融", "证券", "银行", "保险", "教育", "医疗", "健康",
        "文化", "传媒", "广告", "设计", "工程", "建筑", "制造", "物流", "零售", "电商"
    ));
    
    public static final Set<String> POSITION_KEYWORDS = new HashSet<>(Arrays.asList(
        "工程师", "开发", "经理", "主管", "总监", "专家", "架构师", "顾问", "分析师", "设计师",
        "产品", "运营", "市场", "销售", "客服", "人力", "财务", "行政", "法务", "公关",
        "教师", "医生", "护士", "律师", "会计", "审计", "咨询", "培训", "研究", "开发"
    ));
    
    // 分词配置
    public static final int MAX_WORD_LENGTH = 20;  // 最大词长度
    public static final int MIN_WORD_LENGTH = 2;   // 最小词长度
    public static final int MAX_COMBINE_WORDS = 3; // 最大组合词数
} 